package org.flow.basic.threadpool;

import java.util.concurrent.*;

/**
 * 创建一个自定义线程工厂，支持自己对线程工厂使用 fastThreadLocalThread 以便于优化在使用 FastThreadLocal 的时候的一些性能问题。
 *
 * @author xl-9527
 * @since 2024/6/23
 **/
public class CustomThreadPool extends ThreadPoolExecutor {

    /**
     * @param corePoolSize    核心线程数
     * @param maximumPoolSize 最大线程数
     * @param keepAliveTime   非核心线程的销毁时间
     * @param unit            {@code keepAliveTime} 表示的时间单位
     * @param handler         拒绝策略，这里 Executes 默认提供的是直接抛出异常的方式
     */
    public CustomThreadPool(final int corePoolSize, final int maximumPoolSize, final long keepAliveTime,
                            final TimeUnit unit,
                            final RejectedExecutionHandler handler) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingDeque<>(1),
                new CustomThreadFactory(), handler);
    }
}
